package lib

import (
	"goloader"
	"io"
)

// Ptrio 设置io库指针
func Ptrio(symPtr map[string]uintptr) {
	// 注册函数
	goloader.RegFunc(symPtr, "io.Copy", io.Copy)
	goloader.RegFunc(symPtr, "io.CopyBuffer", io.CopyBuffer)
	goloader.RegFunc(symPtr, "io.CopyN", io.CopyN)
	goloader.RegFunc(symPtr, "io.Pipe", io.Pipe)
	goloader.RegFunc(symPtr, "io.ReadAtLeast", io.ReadAtLeast)
	goloader.RegFunc(symPtr, "io.ReadFull", io.ReadFull)
	goloader.RegFunc(symPtr, "io.WriteString", io.WriteString)
	goloader.RegFunc(symPtr, "io.LimitReader", io.LimitReader)
	goloader.RegFunc(symPtr, "io.MultiReader", io.MultiReader)
	goloader.RegFunc(symPtr, "io.TeeReader", io.TeeReader)
	goloader.RegFunc(symPtr, "io.NewSectionReader", io.NewSectionReader)
	goloader.RegFunc(symPtr, "io.MultiWriter", io.MultiWriter)
	// 注册类
	{
		p := new(io.LimitedReader)
		goloader.RegTypes(symPtr, p,
			p.Read,
		)
	}
	{
		p := new(io.PipeReader)
		goloader.RegTypes(symPtr, p,
			p.Close,
			p.CloseWithError,
			p.Read,
		)
	}
	{
		p := new(io.PipeWriter)
		goloader.RegTypes(symPtr, p,
			p.Close,
			p.CloseWithError,
			p.Write,
		)
	}
	{
		p := new(io.SectionReader)
		goloader.RegTypes(symPtr, p,
			p.Read,
			p.ReadAt,
			p.Seek,
			p.Size,
		)
	}
}
